const { util } = require("utils");
const { saveTokenInfo, getDbCache } = require("../../../db");
const { handleLoading } = require("../tokenRule/sub/tokenLoading");
const { TokenStatus, GetTokenType, DB_Err_Exists_Codes } = require("../../../constEnum");
// 添加一条 占位 数据
async function savePlaceholderData(type, appId) {
    // 保存
    let current = new Date().getTime();
    let currentDes = util.baseDateDes(current);

    let dataInfo = {
        type: type,
        appId: appId,
        token: "",
        // 状态是加载中
        tokenStatus: TokenStatus.loading,
        // 要记录下 请求 次数, 防止无限重试
        requestCount: 1,
        createDate: current,
        createDateDes: currentDes,
    };
    return await saveTokenInfo(dataInfo);
}
// 求处理  新的token
async function toSaveNewToken(type, appId) {
    // 还没有 数据呢
    // 先创建一条  占位的
    let [save_err, doc_data] = await savePlaceholderData(type, appId);
    // console.log("创建 临时 数据", err, res);
    if (!util.nilValue(save_err)) {
        // 判断是不是  添加了 重复的错误
        let { code: dbCode } = save_err || {};
        if (DB_Err_Exists_Codes.indexOf(dbCode) >= 0) {
            // 数据库索引 失败了, 已经有数据了
            // 就等待其他的 实例 操作就好了
            // 拿到 已经 存储到数据库的 数据
            let [cache_err, cache_data] = await getDbCache(type, appId);
            if (!util.nilValue(cache_err)) {
                return [cache_err, null];
            }
            let cache = cache_data || {};
            let cacheId = cache._id || "";
            return await handleLoading(cacheId);
        } else {
            // 其他的数据库 失败了, 就返回吧
            return [save_err, null];
        }
    }
    return [
        null,
        { flag: false, message: "要请求新的哦", doc: doc_data, type: GetTokenType.getNew },
    ];
}

module.exports = {
    toSaveNewToken,
};
